5,390
社区成员
发帖
与我相关
我的任务
分享
由于我界面上的Grid都是绑定的TFDMemTable,需要批量处理的时候,如果是直接用绑定TFDMemTable去循环处理,处理速度会很慢,如果我把数据复制到另外一个TFDMemTable里面再处理速度就很快,但是我用TFDMemTable.data把数据复制过去的时候,更新记录的信息没复制过去,造成我用ApplyUpdates去更新数据库的时候,更新不到信息。下面是代码
procedure TFPOrder.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
FDMemTable: TFDMemTable;
begin
if Key = 13 then
begin
FDMemTable := TFDMemTable.Create(nil);
FDMemTable.Data := DetailData.Data;
FDMemTable.First;
while not FDMemTable.Eof do
begin
FDMemTable.Edit;
FDMemTable.FieldByName('TaxPrice').AsFloat :=
RoundFloat(FDMemTable.FieldByName('Price').AsFloat *
(1 + (StrToFloat(Edit2.Text) / 100)), 2);
if FDMemTable.FieldByName('TaxAmount').AsFloat > 0 then
FDMemTable.FieldByName('TaxAmount').AsFloat :=
RoundFloat(FDMemTable.FieldByName('Price').AsFloat *
(1 + (StrToFloat(Edit2.Text) / 100)) * FDMemTable.FieldByName('Qty')
.AsFloat, 2);
FDMemTable.Post;
FDMemTable.Next;
end;
DetailData.Close;
DetailData.Data := FDMemTable.Data;
DetailData.Open;
FDMemTable.Free;
end;
end;
有什么办法,可以快速批量更新数据,还能把更新的信息传递到数据库?
//不需要搞得那么复杂,使用DetailData的EnableControls/ DisableControls就可以了,
//数据更新期间, Grid的显示是不更新的.
procedure TFPOrder.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key <> 13 then Exit;
With DetailData do
begin
DisableControls;
First;
while not Eof do
begin
Edit;
FieldByName('TaxPrice').AsFloat :=
FieldByName('Price').AsFloat * (1 + (StrToFloat(Edit2.Text) / 100));
if FieldByName('TaxAmount').AsFloat > 0 then
FieldByName('TaxAmount').AsFloat :=
FieldByName('Price').AsFloat * (1 + (StrToFloat(Edit2.Text) / 100)) * FieldByName('Qty').AsFloat;
Post;
Next;
end;
EnableControls;
end;
end;
FDMemTable 创建的时候忘记加东西了FDMemTable.CachedUpdates:=True; 这个忘记加了 导致更新的信息没有